linear congruence implementation